

// int main()
// {
//     list<vector<int>> lvp;

//     lvp.emplace_back(1,2,3,4,5);

//     cout<<lvp.size()<<endl;

//     return 0;
// }

// class factor
// {
// public:
//     int operator()(int a, int b)
//     {
//         return a + b;
//     }
// };

// int add(int x, int y)
// {
//     return x + y;
// }

// auto ladd = [](int a, int b) -> int
// { return a + b; };

// using oper_t = function<int(int,int)>;

// int main()
// {
//     oper_t fadd = factor();
//     oper_t fadd1 = add;
//     oper_t fadd2 = ladd;

//     int ret = fadd(1,10);
//     cout<<ret<<endl;

//     cout<<fadd1(1,2)<<endl;
//     cout<<fadd2(1,5)<<endl;

//     return 0;
// }
#include <vector>
#include <list>
#include <iostream>

#include <functional>
using namespace std;

class myplus
{
public:
    myplus() {}
    double func1(int a,double b) {return a + b;}
    static double func2(int a,float b) {return a + b;}
    ~myplus() {}
private:
};

int main()
{
    //静态成员函数，直接包装，直接用
    function<double(int,float)> myp = &myplus::func2;
    cout<<myp(1,9.2)<<endl;

    cout<<endl;

    //成员函数，需要借助于对象来使用
    function<double(myplus*,int,double)> myp1 = &myplus::func1;
    myplus mpobj1;
    cout<<myp1(&mpobj1,3,9.1)<<endl;//借助一个对象指针来调用成员函数
    cout<<endl;

    function<double(myplus,int,double)> myp2 = &myplus::func1;
    cout<<myp2(myplus(),5,9.9)<<endl;//借助一个对象（临时对象来调用成员函数）

    return 0;
}